package cn.meng.base.listener;

import cn.meng.base.vo.BusinessException;
import cn.meng.base.vo.CanalDataVo;
import org.springframework.context.ApplicationListener;
import org.springframework.stereotype.Component;

/**
 * Canal事件监听基类
 * @author 万梦辉
 */
@Component
public abstract class CanalListenerBase implements ApplicationListener<CanalEvent> {

    /**
     * 根据MySql日志中的操作类型，进行分发事件
     * @param event
     */
    @Override
    public void onApplicationEvent(CanalEvent event) {
        CanalDataVo data = (CanalDataVo) event.getSource();
        String type = data.getType();
        if(null != type && !("".equals(type))) {
            //触发对应的事件处理
            switch (type) {
                case "INSERT": insert(data); break;
                case "DELETE": delete(data); break;
                case "UPDATE": update(data); break;
                default: defaultProcess();
            }
        }
    }

    /**
     * 处理数据库触发新增日志
     */
    public void insert(CanalDataVo data) {}

    /**
     * 处理数据库触发删除日志
     */
    public void delete(CanalDataVo data) {}

    /**
     * 处理数据库触发更新日志
     */
    public void update(CanalDataVo data) {}

    /**
     * 预留的默认事件处理方法，如有需要，可在子类CanalListenerProcess里面复写该方法
     */
    public void defaultProcess() {}

}
